/*

	secciones.prg
	Manejo de las distintas secciones del juego. Carga y descarga de recursos
	
*/

CONST
	
	SECCIONES = 3;	// cantidad de secciones
	
	// secciones del juego
	INTRO 	= 0;
	MENU 	= 1;
	TEST	= 2;
	
END

GLOBAL

	seccion = MENU;
	seccionCambio = true;
	seccion_res[SECCIONES]; // indica si se cargaron los recursos

END

//---------------------------------------------------------------------------------------
PROCESS controlarSecciones()
//
// Maneja las secciones del juego
//

PRIVATE

	id_menu;
	id_intro;
	
END


BEGIN

	LOOP
	
		// INICIO DE SECCIONES
		IF ( seccionCambio )
		
			seccionCambio = false;
			
			descargarRecursos();
			cargarRecursos(seccion);
			
			SWITCH ( seccion )
			
				CASE INTRO:	// intro del juego

					id_intro = startIntro();
				
				END
				
				CASE MENU:	// menu principal
				
					id_menu = iniciarMenu();
				
				END
				
				CASE TEST:	// pantalla de prueba
				
					//debug;

					// muestra scroll
					ts_iniciar(0,0,SCREEN_X,SCREEN_Y);
					
					//inicia el jugador
					camara();
					
					controlJugador();
					controlEnemigos();
					
					// inicia objetos
					platafor(1790, 3520, 1, 250);
					
					//reproduce la musica
					play_song(bgm1, 0);
					
				END
				
			END
			
		END
		
		// COMPROBACIONES DE FINAL DE SECCIONES
		SWITCH ( seccion )
		
			CASE INTRO:	// intro del juego
			
				IF ( intro_ended )
					seccionCambio = true;
					seccion = MENU;
				END
		
			END
			
			CASE MENU:	// menu principal
			
				IF ( menu_ended )
				
					IF ( menu_opcion == 2 )
						exit();
					ELSE
					
						seccionCambio = TRUE;
						seccion = TEST;
						
						signal(id_menu, s_kill_tree);
					END
					
				
				END
				
			
			END
			
			CASE TEST:	// pantalla de prueba
				
			END
			
		END
		
	
		frame;
		
	END

END

//---------------------------------------------------------------------------------------
FUNCTION cargarRecursos(seccion)
//
// Carga todos los recursos del seccion seleccionado
//

BEGIN

	IF ( seccion_res[seccion] )	// si los recursos ya fueron cargadors
	
		print("Error, recursos ya cargados");
		
	ELSE
	
		print("Iniciando carga de recursos de seccion: " + seccion);
		
		// carga de recursos
		SWITCH ( seccion )
		
			CASE INTRO:
			
				fpg_intro = 	load_fpg("fpg/intro.fpg");
			
			END
			
			CASE MENU:
			
				fpg_intro = 	load_fpg("fpg/intro.fpg");
				fpg_menu = 		load_fpg("fpg/menu.fpg");
			
			END
			
			CASE TEST:
			
				// carga graficos
				fpg_tiles = 	load_fpg("fpg/tiles.fpg");
				fpg_toki = 		load_fpg("fpg/toki.fpg");
				fpg_enemigos = 	load_fpg("fpg/enemigos.fpg");
				fpg_test = 		load_fpg("fpg/test.fpg");
				fpg_objetos = 	load_fpg("fpg/objetos.fpg");
					
				// carga scroll
				load("maps/mapa1.dat", mapa);
				
				// carga audio
				bgm1 = load_song("audio/bgm1.ogg");
				
			END
			
		END
		
		// informa que se realizo la carga
		seccion_res[seccion] = TRUE;
	
	END
	

	

END

//---------------------------------------------------------------------------------------
FUNCTION descargarRecursos()
//
// Descarga los recursos de todos los secciones que esten cargados
//

PRIVATE
	i;
END

BEGIN

	print("Iniciando descarga de Recursos...");

	FOR (i=0; i < SECCIONES; i++)
	
		IF ( seccion_res[i] )	// si la seccion esta cargada la descarga
		
			SWITCH ( i )
			
				CASE INTRO:
				
					unload_fpg( fpg_intro );
					
				END
				
				CASE MENU:
				
					unload_fpg( fpg_intro );
					unload_fpg( fpg_menu );
					
				END
				
				CASE TEST:
				
					unload_fpg(fpg_tiles);
					unload_fpg(fpg_toki);
					unload_fpg(fpg_enemigos);
					unload_fpg(fpg_objetos);
					unload_fpg(fpg_test);
					
				END
				
			END
			
			// informa que la descarga fue realizada
			seccion_res[i] = FALSE;
		
		END
		
	END
END
